US adults
- Use participants’ responses (participant level) to infer factor structure (group level).
[see primary analysis]
F1 F2 F3
add_and_subtract_numbers 0.3015693 0.6612121 0.7481824
choose_what_to_do 0.6276047 0.5857757 0.7653071
feel_guilty 0.4849668 0.9023377 0.4963885
feel_happy 0.6424526 0.7481342 0.5906878
feel_love 0.5717189 0.7613585 0.6260784
feel_pain 0.8567989 0.5385989 0.5680515
- Use factor structure (group level) in combination with responses (participant level) to generate factor scores (participant level).
F1 F2 F3
us_adults_001_children 0.7909415 0.8954840 0.65345066
us_adults_002_dogs 0.8713361 0.5543401 0.53060180
us_adults_003_flowers 0.2746960 0.2022339 0.23657931
us_adults_004_ghosts 0.1886655 0.2927940 0.06010919
us_adults_005_god 0.5496792 0.4723938 0.83329245
us_adults_006_mice 0.8317943 0.8963377 0.73683937
X. Use factor scores (participant level) to make binary decisions about attributions of body, heart, and mind (participant level level). [NEEDED?]
[not yet done]
- Use factor scores [or X?] (participant level) in combination with factor loadings (group level) to to generate likelihood of each capacity (participant level).
- Compare likelihood of each capacity (participant level) with actual responses (participant level) to assess consistency or violations with group-level factor structure.
Joining, by = "subj_id"
Joining, by = "capacity"


Ghana adults
- Use participants’ responses (participant level) to infer factor structure (group level).
[see primary analysis]
F1 F2 F3
add_and_subtract_numbers 0.8977570 0.4136200 0.5320056
choose_what_to_do 0.9636416 0.4411554 0.5062167
feel_guilty 0.7126476 0.5189170 0.7807534
feel_happy 0.8540450 0.6572355 0.5245890
feel_love 0.8346477 0.6966779 0.4696541
feel_pain 0.4913013 0.9277966 0.4906321
- Use factor structure (group level) in combination with responses (participant level) to generate factor scores (participant level).
F1 F2 F3
gh_adults_001_mice 0.1680483 0.3503157 0.0376021
gh_adults_002_rocks 0.1338851 0.0719287 0.2601291
gh_adults_003_ghosts 0.1338851 0.0719287 0.2601291
gh_adults_004_children 0.2390378 0.6541640 0.2865854
gh_adults_005_dogs 0.2496531 0.5315998 0.1083054
gh_adults_006_mice 0.1369381 0.4771385 0.1624910
X. Use factor scores (participant level) to make binary decisions about attributions of body, heart, and mind (participant level level). [NEEDED?]
[not yet done]
- Use factor scores [or X?] (participant level) in combination with factor loadings (group level) to to generate likelihood of each capacity (participant level).
- Compare likelihood of each capacity (participant level) with actual responses (participant level) to assess consistency or violations with group-level factor structure.
Joining, by = "subj_id"
Joining, by = "capacity"


Thailand adults
- Use participants’ responses (participant level) to infer factor structure (group level).
[see primary analysis]
F1 F2 F3
add_and_subtract_numbers 0.3345998 0.6719092 0.7022970
choose_what_to_do 0.5664697 0.5761459 0.6567927
feel_guilty 0.5590047 0.7524198 0.5655023
feel_happy 0.6425198 0.6704252 0.6321465
feel_love 0.7073527 0.6682337 0.6099321
feel_pain 0.8593740 0.4976528 0.5549564
- Use factor structure (group level) in combination with responses (participant level) to generate factor scores (participant level).
F1 F2 F3
th_adults_001_beetles 0.6233860 0.1969347 0.3112682
th_adults_002_cellphones 0.4833901 0.4476217 0.6774423
th_adults_003_chickens 0.6684956 0.3701527 0.7637585
th_adults_004_children 0.5107500 0.6915550 0.6301014
th_adults_005_dogs 0.7923884 0.4644085 0.3598374
th_adults_006_flowers 0.5709171 0.7423704 0.5601472
X. Use factor scores (participant level) to make binary decisions about attributions of body, heart, and mind (participant level level). [NEEDED?]
[not yet done]
- Use factor scores [or X?] (participant level) in combination with factor loadings (group level) to to generate likelihood of each capacity (participant level).
- Compare likelihood of each capacity (participant level) with actual responses (participant level) to assess consistency or violations with group-level factor structure.
Joining, by = "subj_id"
Joining, by = "capacity"


China adults
- Use participants’ responses (participant level) to infer factor structure (group level).
[see primary analysis]
F1 F2 F3
add_and_subtract_numbers 0.6284769 0.3740907 0.7379231
choose_what_to_do 0.5779161 0.5186490 0.7441678
feel_guilty 0.8040457 0.3863869 0.5952617
feel_happy 0.7462067 0.6846333 0.5606633
feel_love 0.8084793 0.5283226 0.5794758
feel_pain 0.5452631 0.9016957 0.5112793
- Use factor structure (group level) in combination with responses (participant level) to generate factor scores (participant level).
F1 F2 F3
ch_adults_001_crickets 0.5692214 0.70389580 0.6341113
ch_adults_002_cellphones 0.1396171 0.08277301 0.2361723
ch_adults_003_chickens 0.1809178 0.75578045 0.5116998
ch_adults_004_children 0.7612876 0.76045109 0.5833485
ch_adults_005_dogs 0.7572805 0.74353491 0.2976104
ch_adults_006_flowers 0.2348517 0.46360755 0.1464597
X. Use factor scores (participant level) to make binary decisions about attributions of body, heart, and mind (participant level level). [NEEDED?]
[not yet done]
- Use factor scores [or X?] (participant level) in combination with factor loadings (group level) to to generate likelihood of each capacity (participant level).
- Compare likelihood of each capacity (participant level) with actual responses (participant level) to assess consistency or violations with group-level factor structure.
Joining, by = "subj_id"
Joining, by = "capacity"


Vanuatu adults
- Use participants’ responses (participant level) to infer factor structure (group level).
[see primary analysis]
F1 F2
add_and_subtract_numbers 0.8695329 0.3822839
choose_what_to_do 0.8698792 0.5049559
feel_guilty 0.6753464 0.7287989
feel_happy 0.8838876 0.4860213
feel_love 0.8311705 0.5654258
feel_pain 0.5665094 0.8688630
- Use factor structure (group level) in combination with responses (participant level) to generate factor scores (participant level).
F1 F2
vt_adults_001_mice 0.4745304 0.4925990
vt_adults_003_children 0.9512062 0.9196058
vt_adults_004_chickens 0.9512062 0.9196058
vt_adults_005_children 0.9512062 0.9196058
vt_adults_006_god 0.7480859 0.1696910
vt_adults_008_cellphones 0.7147565 0.9022099
X. Use factor scores (participant level) to make binary decisions about attributions of body, heart, and mind (participant level level). [NEEDED?]
[not yet done]
- Use factor scores [or X?] (participant level) in combination with factor loadings (group level) to to generate likelihood of each capacity (participant level).
- Compare likelihood of each capacity (participant level) with actual responses (participant level) to assess consistency or violations with group-level factor structure.
Joining, by = "subj_id"
Joining, by = "capacity"


Comparison


LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKCiMgVVMgYWR1bHRzCgoxLiBVc2UgcGFydGljaXBhbnRzJyByZXNwb25zZXMgKHBhcnRpY2lwYW50IGxldmVsKSB0byBpbmZlciBmYWN0b3Igc3RydWN0dXJlIChncm91cCBsZXZlbCkuCgpbc2VlIHByaW1hcnkgYW5hbHlzaXNdCgpgYGB7cn0KbG9hZGluZ3NfdXNfYWR1bHRzIDwtIGVmYV91c19hZHVsdHMkbG9hZGluZ3NbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcmVuYW1lX2FsbCh+IGdzdWIoIl4uKl8iLCAiIiwgLikpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSAlPiUKICBtdXRhdGUoY2FwYWNpdHkgPSBnc3ViKCIgXFxbXFwuXFwuXFwuXFxdIiwgIiIsIGNhcGFjaXR5KSwKICAgICAgICAgY2FwYWNpdHkgPSBnc3ViKCIgIiwgIl8iLCBjYXBhY2l0eSkpICU+JQogIGNvbHVtbl90b19yb3duYW1lcygiY2FwYWNpdHkiKSAlPiUKICBhcy5tYXRyaXgoKSAlPiUKICAjIHJlc2NhbGUgdG8gcmFuZ2UgZnJvbSAwIHRvIDEKICBzY2FsZXM6OnJlc2NhbGUodG8gPSBjKDAsIDEpLCBmcm9tID0gYygtMSwgMSkpCgpoZWFkKGxvYWRpbmdzX3VzX2FkdWx0cykKYGBgCgoyLiBVc2UgZmFjdG9yIHN0cnVjdHVyZSAoZ3JvdXAgbGV2ZWwpIGluIGNvbWJpbmF0aW9uIHdpdGggcmVzcG9uc2VzIChwYXJ0aWNpcGFudCBsZXZlbCkgdG8gZ2VuZXJhdGUgZmFjdG9yIHNjb3JlcyAocGFydGljaXBhbnQgbGV2ZWwpLgoKYGBge3J9CnNjb3Jlc191c19hZHVsdHMgPC0gZWZhX3VzX2FkdWx0cyRzY29yZXNbXSAlPiUgCiAgIyByZXNjYWxlIHRvIHJhbmdlIGZyb20gMCB0byAxLCB1c2luZyBvYnNlcnZlZCByYW5nZSBvZiBmYWN0b3Igc2NvcmVzCiAgc2NhbGVzOjpyZXNjYWxlKHRvID0gYygwLCAxKSkKCmhlYWQoc2NvcmVzX3VzX2FkdWx0cykKYGBgCgpYLiBVc2UgZmFjdG9yIHNjb3JlcyAocGFydGljaXBhbnQgbGV2ZWwpIHRvIG1ha2UgYmluYXJ5IGRlY2lzaW9ucyBhYm91dCBhdHRyaWJ1dGlvbnMgb2YgYm9keSwgaGVhcnQsIGFuZCBtaW5kIChwYXJ0aWNpcGFudCBsZXZlbCBsZXZlbCkuIFtORUVERUQ/XQoKW25vdCB5ZXQgZG9uZV0KCjMuIFVzZSBmYWN0b3Igc2NvcmVzIFtvciBYP10gKHBhcnRpY2lwYW50IGxldmVsKSBpbiBjb21iaW5hdGlvbiB3aXRoIGZhY3RvciBsb2FkaW5ncyAoZ3JvdXAgbGV2ZWwpIHRvIHRvIGdlbmVyYXRlIGxpa2VsaWhvb2Qgb2YgZWFjaCBjYXBhY2l0eSAocGFydGljaXBhbnQgbGV2ZWwpLgoKYGBge3J9Cm1hZ2ljX3VzX2FkdWx0cyA8LSBtYWdpY19mdW4obG9hZGluZ3NfdXNfYWR1bHRzLCBzY29yZXNfdXNfYWR1bHRzKSAlPiUKICBkYXRhLmZyYW1lKCkKYGBgCgo0LiBDb21wYXJlIGxpa2VsaWhvb2Qgb2YgZWFjaCBjYXBhY2l0eSAocGFydGljaXBhbnQgbGV2ZWwpIHdpdGggYWN0dWFsIHJlc3BvbnNlcyAocGFydGljaXBhbnQgbGV2ZWwpIHRvIGFzc2VzcyBjb25zaXN0ZW5jeSBvciB2aW9sYXRpb25zIHdpdGggZ3JvdXAtbGV2ZWwgZmFjdG9yIHN0cnVjdHVyZS4KCmBgYHtyfQptYWdpY19zdWJfZGF0YV91c19hZHVsdHMgPC0gbWFnaWNfdXNfYWR1bHRzIC0gZF91c19hZHVsdHNfdwoKbWFnaWNfc3ViX2RhdGFfdXNfYWR1bHRzIDwtIG1hZ2ljX3N1Yl9kYXRhX3VzX2FkdWx0cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJzdWJqX2lkIikgJT4lCiAgZ2F0aGVyKGNhcGFjaXR5LCBkaWZmLCAtc3Vial9pZCkgJT4lCiAgbXV0YXRlKGNhcGFjaXR5ID0gZ3N1YigiXyIsICIgIiwgY2FwYWNpdHkpLAogICAgICAgICBjYXBhY2l0eSA9IGdzdWIoImZlZWwgc2ljayIsICJmZWVsIHNpY2sgXFxbXFwuXFwuXFwuXFxdIiwgY2FwYWNpdHkpKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMn0KbWFnaWNfc3ViX2RhdGFfdXNfYWR1bHRzICU+JQogIGxlZnRfam9pbihkX3VzX2FkdWx0cyAlPiUgZGlzdGluY3Qoc3Vial9pZCwgdGFyZ2V0KSkgJT4lCiAgbGVmdF9qb2luKGxvYWRpbmdzX2FkdWx0cyAlPiUgCiAgICAgICAgICAgICAgZGlzdGluY3QoY2FwYWNpdHksIGNhcGFjaXR5X29yZF91cykpICU+JQogIGdncGxvdChhZXMoeCA9IGNhcGFjaXR5X29yZF91cywgCiAgICAgICAgICAgICB5ID0gc3Vial9pZCwgCiAgICAgICAgICAgICBmaWxsID0gZGlmZikpICsKICBmYWNldF9ncmlkKHJvd3MgPSB2YXJzKHRhcmdldCksIAogICAgICAgICAgICAgc3BhY2UgPSAiZnJlZSIsIHNjYWxlcyA9ICJmcmVlIikgKwogIGdlb21fdGlsZSgpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcih0eXBlID0gImRpdiIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIlVTIGFkdWx0cyIsCiAgICAgICB4ID0gIkNhcGFjaXR5IiwgeSA9ICJQYXJ0aWNpcGFudCIsIGZpbGwgPSAiUHJlZGljdGVkIC0gQWN0dWFsIikKYGBgCgpgYGB7cn0KbWFnaWNfc3ViX2RhdGFfdXNfYWR1bHRzICU+JQogIGdyb3VwX2J5KHN1YmpfaWQpICU+JQogIHN1bW1hcmlzZShtZWFuX2RpZmYgPSBtZWFuKGRpZmYsIG5hLnJtID0gVCkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBtZWFuX2RpZmYpKSArCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gMCwgbHR5ID0gMiwgY29sb3IgPSAiZ3JheTUwIikgKwogIGdlb21fZGVuc2l0eSgpICsKICBsYWJzKHRpdGxlID0gIlVTIGFkdWx0cyIsCiAgICAgICB4ID0gIk1lYW4gUHJlZGljdGVkIC0gQWN0dWFsIiwgeSA9ICJEZW5zaXR5IikKYGBgCgoKIyBHaGFuYSBhZHVsdHMKCjEuIFVzZSBwYXJ0aWNpcGFudHMnIHJlc3BvbnNlcyAocGFydGljaXBhbnQgbGV2ZWwpIHRvIGluZmVyIGZhY3RvciBzdHJ1Y3R1cmUgKGdyb3VwIGxldmVsKS4KCltzZWUgcHJpbWFyeSBhbmFseXNpc10KCmBgYHtyfQpsb2FkaW5nc19naF9hZHVsdHMgPC0gZWZhX2doX2FkdWx0cyRsb2FkaW5nc1tdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByZW5hbWVfYWxsKH4gZ3N1YigiXi4qXyIsICIiLCAuKSkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJjYXBhY2l0eSIpICU+JQogIG11dGF0ZShjYXBhY2l0eSA9IGdzdWIoIiBcXFtcXC5cXC5cXC5cXF0iLCAiIiwgY2FwYWNpdHkpLAogICAgICAgICBjYXBhY2l0eSA9IGdzdWIoIiAiLCAiXyIsIGNhcGFjaXR5KSkgJT4lCiAgY29sdW1uX3RvX3Jvd25hbWVzKCJjYXBhY2l0eSIpICU+JQogIGFzLm1hdHJpeCgpICU+JQogICMgcmVzY2FsZSB0byByYW5nZSBmcm9tIDAgdG8gMQogIHNjYWxlczo6cmVzY2FsZSh0byA9IGMoMCwgMSksIGZyb20gPSBjKC0xLCAxKSkKCmhlYWQobG9hZGluZ3NfZ2hfYWR1bHRzKQpgYGAKCjIuIFVzZSBmYWN0b3Igc3RydWN0dXJlIChncm91cCBsZXZlbCkgaW4gY29tYmluYXRpb24gd2l0aCByZXNwb25zZXMgKHBhcnRpY2lwYW50IGxldmVsKSB0byBnZW5lcmF0ZSBmYWN0b3Igc2NvcmVzIChwYXJ0aWNpcGFudCBsZXZlbCkuCgpgYGB7cn0Kc2NvcmVzX2doX2FkdWx0cyA8LSBlZmFfZ2hfYWR1bHRzJHNjb3Jlc1tdICU+JSAKICAjIHJlc2NhbGUgdG8gcmFuZ2UgZnJvbSAwIHRvIDEsIHVzaW5nIG9ic2VydmVkIHJhbmdlIG9mIGZhY3RvciBzY29yZXMKICBzY2FsZXM6OnJlc2NhbGUodG8gPSBjKDAsIDEpKQoKaGVhZChzY29yZXNfZ2hfYWR1bHRzKQpgYGAKClguIFVzZSBmYWN0b3Igc2NvcmVzIChwYXJ0aWNpcGFudCBsZXZlbCkgdG8gbWFrZSBiaW5hcnkgZGVjaXNpb25zIGFib3V0IGF0dHJpYnV0aW9ucyBvZiBib2R5LCBoZWFydCwgYW5kIG1pbmQgKHBhcnRpY2lwYW50IGxldmVsIGxldmVsKS4gW05FRURFRD9dCgpbbm90IHlldCBkb25lXQoKMy4gVXNlIGZhY3RvciBzY29yZXMgW29yIFg/XSAocGFydGljaXBhbnQgbGV2ZWwpIGluIGNvbWJpbmF0aW9uIHdpdGggZmFjdG9yIGxvYWRpbmdzIChncm91cCBsZXZlbCkgdG8gdG8gZ2VuZXJhdGUgbGlrZWxpaG9vZCBvZiBlYWNoIGNhcGFjaXR5IChwYXJ0aWNpcGFudCBsZXZlbCkuCgpgYGB7cn0KbWFnaWNfZ2hfYWR1bHRzIDwtIG1hZ2ljX2Z1bihsb2FkaW5nc19naF9hZHVsdHMsIHNjb3Jlc19naF9hZHVsdHMpICU+JQogIGRhdGEuZnJhbWUoKQpgYGAKCjQuIENvbXBhcmUgbGlrZWxpaG9vZCBvZiBlYWNoIGNhcGFjaXR5IChwYXJ0aWNpcGFudCBsZXZlbCkgd2l0aCBhY3R1YWwgcmVzcG9uc2VzIChwYXJ0aWNpcGFudCBsZXZlbCkgdG8gYXNzZXNzIGNvbnNpc3RlbmN5IG9yIHZpb2xhdGlvbnMgd2l0aCBncm91cC1sZXZlbCBmYWN0b3Igc3RydWN0dXJlLgoKYGBge3J9Cm1hZ2ljX3N1Yl9kYXRhX2doX2FkdWx0cyA8LSBtYWdpY19naF9hZHVsdHMgLSBkX2doX2FkdWx0c193CgptYWdpY19zdWJfZGF0YV9naF9hZHVsdHMgPC0gbWFnaWNfc3ViX2RhdGFfZ2hfYWR1bHRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInN1YmpfaWQiKSAlPiUKICBnYXRoZXIoY2FwYWNpdHksIGRpZmYsIC1zdWJqX2lkKSAlPiUKICBtdXRhdGUoY2FwYWNpdHkgPSBnc3ViKCJfIiwgIiAiLCBjYXBhY2l0eSksCiAgICAgICAgIGNhcGFjaXR5ID0gZ3N1YigiZmVlbCBzaWNrIiwgImZlZWwgc2ljayBcXFtcXC5cXC5cXC5cXF0iLCBjYXBhY2l0eSkpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAyfQptYWdpY19zdWJfZGF0YV9naF9hZHVsdHMgJT4lCiAgbGVmdF9qb2luKGRfZ2hfYWR1bHRzICU+JSBkaXN0aW5jdChzdWJqX2lkLCB0YXJnZXQpKSAlPiUKICBsZWZ0X2pvaW4obG9hZGluZ3NfYWR1bHRzICU+JSAKICAgICAgICAgICAgICBkaXN0aW5jdChjYXBhY2l0eSwgY2FwYWNpdHlfb3JkX2doKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gY2FwYWNpdHlfb3JkX2doLCAKICAgICAgICAgICAgIHkgPSBzdWJqX2lkLCAKICAgICAgICAgICAgIGZpbGwgPSBkaWZmKSkgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnModGFyZ2V0KSwgCiAgICAgICAgICAgICBzcGFjZSA9ICJmcmVlIiwgc2NhbGVzID0gImZyZWUiKSArCiAgZ2VvbV90aWxlKCkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHR5cGUgPSAiZGl2IikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIGxhYnModGl0bGUgPSAiR2hhbmEgYWR1bHRzIiwKICAgICAgIHggPSAiQ2FwYWNpdHkiLCB5ID0gIlBhcnRpY2lwYW50IiwgZmlsbCA9ICJQcmVkaWN0ZWQgLSBBY3R1YWwiKQpgYGAKCmBgYHtyfQptYWdpY19zdWJfZGF0YV9naF9hZHVsdHMgJT4lCiAgZ3JvdXBfYnkoc3Vial9pZCkgJT4lCiAgc3VtbWFyaXNlKG1lYW5fZGlmZiA9IG1lYW4oZGlmZiwgbmEucm0gPSBUKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGdncGxvdChhZXMoeCA9IG1lYW5fZGlmZikpICsKICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAwLCBsdHkgPSAyLCBjb2xvciA9ICJncmF5NTAiKSArCiAgZ2VvbV9kZW5zaXR5KCkgKwogIGxhYnModGl0bGUgPSAiR2hhbmEgYWR1bHRzIiwKICAgICAgIHggPSAiTWVhbiBQcmVkaWN0ZWQgLSBBY3R1YWwiLCB5ID0gIkRlbnNpdHkiKQpgYGAKCgoKIyBUaGFpbGFuZCBhZHVsdHMKCjEuIFVzZSBwYXJ0aWNpcGFudHMnIHJlc3BvbnNlcyAocGFydGljaXBhbnQgbGV2ZWwpIHRvIGluZmVyIGZhY3RvciBzdHJ1Y3R1cmUgKGdyb3VwIGxldmVsKS4KCltzZWUgcHJpbWFyeSBhbmFseXNpc10KCmBgYHtyfQpsb2FkaW5nc190aF9hZHVsdHMgPC0gZWZhX3RoX2FkdWx0cyRsb2FkaW5nc1tdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByZW5hbWVfYWxsKH4gZ3N1YigiXi4qXyIsICIiLCAuKSkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJjYXBhY2l0eSIpICU+JQogIG11dGF0ZShjYXBhY2l0eSA9IGdzdWIoIiBcXFtcXC5cXC5cXC5cXF0iLCAiIiwgY2FwYWNpdHkpLAogICAgICAgICBjYXBhY2l0eSA9IGdzdWIoIiAiLCAiXyIsIGNhcGFjaXR5KSkgJT4lCiAgY29sdW1uX3RvX3Jvd25hbWVzKCJjYXBhY2l0eSIpICU+JQogIGFzLm1hdHJpeCgpICU+JQogICMgcmVzY2FsZSB0byByYW5nZSBmcm9tIDAgdG8gMQogIHNjYWxlczo6cmVzY2FsZSh0byA9IGMoMCwgMSksIGZyb20gPSBjKC0xLCAxKSkKCmhlYWQobG9hZGluZ3NfdGhfYWR1bHRzKQpgYGAKCjIuIFVzZSBmYWN0b3Igc3RydWN0dXJlIChncm91cCBsZXZlbCkgaW4gY29tYmluYXRpb24gd2l0aCByZXNwb25zZXMgKHBhcnRpY2lwYW50IGxldmVsKSB0byBnZW5lcmF0ZSBmYWN0b3Igc2NvcmVzIChwYXJ0aWNpcGFudCBsZXZlbCkuCgpgYGB7cn0Kc2NvcmVzX3RoX2FkdWx0cyA8LSBlZmFfdGhfYWR1bHRzJHNjb3Jlc1tdICU+JSAKICAjIHJlc2NhbGUgdG8gcmFuZ2UgZnJvbSAwIHRvIDEsIHVzaW5nIG9ic2VydmVkIHJhbmdlIG9mIGZhY3RvciBzY29yZXMKICBzY2FsZXM6OnJlc2NhbGUodG8gPSBjKDAsIDEpKQoKaGVhZChzY29yZXNfdGhfYWR1bHRzKQpgYGAKClguIFVzZSBmYWN0b3Igc2NvcmVzIChwYXJ0aWNpcGFudCBsZXZlbCkgdG8gbWFrZSBiaW5hcnkgZGVjaXNpb25zIGFib3V0IGF0dHJpYnV0aW9ucyBvZiBib2R5LCBoZWFydCwgYW5kIG1pbmQgKHBhcnRpY2lwYW50IGxldmVsIGxldmVsKS4gW05FRURFRD9dCgpbbm90IHlldCBkb25lXQoKMy4gVXNlIGZhY3RvciBzY29yZXMgW29yIFg/XSAocGFydGljaXBhbnQgbGV2ZWwpIGluIGNvbWJpbmF0aW9uIHdpdGggZmFjdG9yIGxvYWRpbmdzIChncm91cCBsZXZlbCkgdG8gdG8gZ2VuZXJhdGUgbGlrZWxpaG9vZCBvZiBlYWNoIGNhcGFjaXR5IChwYXJ0aWNpcGFudCBsZXZlbCkuCgpgYGB7cn0KbWFnaWNfdGhfYWR1bHRzIDwtIG1hZ2ljX2Z1bihsb2FkaW5nc190aF9hZHVsdHMsIHNjb3Jlc190aF9hZHVsdHMpICU+JQogIGRhdGEuZnJhbWUoKQpgYGAKCjQuIENvbXBhcmUgbGlrZWxpaG9vZCBvZiBlYWNoIGNhcGFjaXR5IChwYXJ0aWNpcGFudCBsZXZlbCkgd2l0aCBhY3R1YWwgcmVzcG9uc2VzIChwYXJ0aWNpcGFudCBsZXZlbCkgdG8gYXNzZXNzIGNvbnNpc3RlbmN5IG9yIHZpb2xhdGlvbnMgd2l0aCBncm91cC1sZXZlbCBmYWN0b3Igc3RydWN0dXJlLgoKYGBge3J9Cm1hZ2ljX3N1Yl9kYXRhX3RoX2FkdWx0cyA8LSBtYWdpY190aF9hZHVsdHMgLSBkX3RoX2FkdWx0c193CgptYWdpY19zdWJfZGF0YV90aF9hZHVsdHMgPC0gbWFnaWNfc3ViX2RhdGFfdGhfYWR1bHRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInN1YmpfaWQiKSAlPiUKICBnYXRoZXIoY2FwYWNpdHksIGRpZmYsIC1zdWJqX2lkKSAlPiUKICBtdXRhdGUoY2FwYWNpdHkgPSBnc3ViKCJfIiwgIiAiLCBjYXBhY2l0eSksCiAgICAgICAgIGNhcGFjaXR5ID0gZ3N1YigiZmVlbCBzaWNrIiwgImZlZWwgc2ljayBcXFtcXC5cXC5cXC5cXF0iLCBjYXBhY2l0eSkpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAyfQptYWdpY19zdWJfZGF0YV90aF9hZHVsdHMgJT4lCiAgbGVmdF9qb2luKGRfdGhfYWR1bHRzICU+JSBkaXN0aW5jdChzdWJqX2lkLCB0YXJnZXQpKSAlPiUKICBsZWZ0X2pvaW4obG9hZGluZ3NfYWR1bHRzICU+JSAKICAgICAgICAgICAgICBkaXN0aW5jdChjYXBhY2l0eSwgY2FwYWNpdHlfb3JkX3RoKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gY2FwYWNpdHlfb3JkX3RoLCAKICAgICAgICAgICAgIHkgPSBzdWJqX2lkLCAKICAgICAgICAgICAgIGZpbGwgPSBkaWZmKSkgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnModGFyZ2V0KSwgCiAgICAgICAgICAgICBzcGFjZSA9ICJmcmVlIiwgc2NhbGVzID0gImZyZWUiKSArCiAgZ2VvbV90aWxlKCkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHR5cGUgPSAiZGl2IikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIGxhYnModGl0bGUgPSAiVGhhaWxhbmQgYWR1bHRzIiwKICAgICAgIHggPSAiQ2FwYWNpdHkiLCB5ID0gIlBhcnRpY2lwYW50IiwgZmlsbCA9ICJQcmVkaWN0ZWQgLSBBY3R1YWwiKQpgYGAKCmBgYHtyfQptYWdpY19zdWJfZGF0YV90aF9hZHVsdHMgJT4lCiAgZ3JvdXBfYnkoc3Vial9pZCkgJT4lCiAgc3VtbWFyaXNlKG1lYW5fZGlmZiA9IG1lYW4oZGlmZiwgbmEucm0gPSBUKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGdncGxvdChhZXMoeCA9IG1lYW5fZGlmZikpICsKICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAwLCBsdHkgPSAyLCBjb2xvciA9ICJncmF5NTAiKSArCiAgZ2VvbV9kZW5zaXR5KCkgKwogIGxhYnModGl0bGUgPSAiVGhhaWxhbmQgYWR1bHRzIiwKICAgICAgIHggPSAiTWVhbiBQcmVkaWN0ZWQgLSBBY3R1YWwiLCB5ID0gIkRlbnNpdHkiKQpgYGAKCgojIENoaW5hIGFkdWx0cwoKMS4gVXNlIHBhcnRpY2lwYW50cycgcmVzcG9uc2VzIChwYXJ0aWNpcGFudCBsZXZlbCkgdG8gaW5mZXIgZmFjdG9yIHN0cnVjdHVyZSAoZ3JvdXAgbGV2ZWwpLgoKW3NlZSBwcmltYXJ5IGFuYWx5c2lzXQoKYGBge3J9CmxvYWRpbmdzX2NoX2FkdWx0cyA8LSBlZmFfY2hfYWR1bHRzJGxvYWRpbmdzW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJlbmFtZV9hbGwofiBnc3ViKCJeLipfIiwgIiIsIC4pKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikgJT4lCiAgbXV0YXRlKGNhcGFjaXR5ID0gZ3N1YigiIFxcW1xcLlxcLlxcLlxcXSIsICIiLCBjYXBhY2l0eSksCiAgICAgICAgIGNhcGFjaXR5ID0gZ3N1YigiICIsICJfIiwgY2FwYWNpdHkpKSAlPiUKICBjb2x1bW5fdG9fcm93bmFtZXMoImNhcGFjaXR5IikgJT4lCiAgYXMubWF0cml4KCkgJT4lCiAgIyByZXNjYWxlIHRvIHJhbmdlIGZyb20gMCB0byAxCiAgc2NhbGVzOjpyZXNjYWxlKHRvID0gYygwLCAxKSwgZnJvbSA9IGMoLTEsIDEpKQoKaGVhZChsb2FkaW5nc19jaF9hZHVsdHMpCmBgYAoKMi4gVXNlIGZhY3RvciBzdHJ1Y3R1cmUgKGdyb3VwIGxldmVsKSBpbiBjb21iaW5hdGlvbiB3aXRoIHJlc3BvbnNlcyAocGFydGljaXBhbnQgbGV2ZWwpIHRvIGdlbmVyYXRlIGZhY3RvciBzY29yZXMgKHBhcnRpY2lwYW50IGxldmVsKS4KCmBgYHtyfQpzY29yZXNfY2hfYWR1bHRzIDwtIGVmYV9jaF9hZHVsdHMkc2NvcmVzW10gJT4lIAogICMgcmVzY2FsZSB0byByYW5nZSBmcm9tIDAgdG8gMSwgdXNpbmcgb2JzZXJ2ZWQgcmFuZ2Ugb2YgZmFjdG9yIHNjb3JlcwogIHNjYWxlczo6cmVzY2FsZSh0byA9IGMoMCwgMSkpCgpoZWFkKHNjb3Jlc19jaF9hZHVsdHMpCmBgYAoKWC4gVXNlIGZhY3RvciBzY29yZXMgKHBhcnRpY2lwYW50IGxldmVsKSB0byBtYWtlIGJpbmFyeSBkZWNpc2lvbnMgYWJvdXQgYXR0cmlidXRpb25zIG9mIGJvZHksIGhlYXJ0LCBhbmQgbWluZCAocGFydGljaXBhbnQgbGV2ZWwgbGV2ZWwpLiBbTkVFREVEP10KCltub3QgeWV0IGRvbmVdCgozLiBVc2UgZmFjdG9yIHNjb3JlcyBbb3IgWD9dIChwYXJ0aWNpcGFudCBsZXZlbCkgaW4gY29tYmluYXRpb24gd2l0aCBmYWN0b3IgbG9hZGluZ3MgKGdyb3VwIGxldmVsKSB0byB0byBnZW5lcmF0ZSBsaWtlbGlob29kIG9mIGVhY2ggY2FwYWNpdHkgKHBhcnRpY2lwYW50IGxldmVsKS4KCmBgYHtyfQptYWdpY19jaF9hZHVsdHMgPC0gbWFnaWNfZnVuKGxvYWRpbmdzX2NoX2FkdWx0cywgc2NvcmVzX2NoX2FkdWx0cykgJT4lCiAgZGF0YS5mcmFtZSgpCmBgYAoKNC4gQ29tcGFyZSBsaWtlbGlob29kIG9mIGVhY2ggY2FwYWNpdHkgKHBhcnRpY2lwYW50IGxldmVsKSB3aXRoIGFjdHVhbCByZXNwb25zZXMgKHBhcnRpY2lwYW50IGxldmVsKSB0byBhc3Nlc3MgY29uc2lzdGVuY3kgb3IgdmlvbGF0aW9ucyB3aXRoIGdyb3VwLWxldmVsIGZhY3RvciBzdHJ1Y3R1cmUuCgpgYGB7cn0KbWFnaWNfc3ViX2RhdGFfY2hfYWR1bHRzIDwtIG1hZ2ljX2NoX2FkdWx0cyAtIGRfY2hfYWR1bHRzX3cKCm1hZ2ljX3N1Yl9kYXRhX2NoX2FkdWx0cyA8LSBtYWdpY19zdWJfZGF0YV9jaF9hZHVsdHMgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigic3Vial9pZCIpICU+JQogIGdhdGhlcihjYXBhY2l0eSwgZGlmZiwgLXN1YmpfaWQpICU+JQogIG11dGF0ZShjYXBhY2l0eSA9IGdzdWIoIl8iLCAiICIsIGNhcGFjaXR5KSwKICAgICAgICAgY2FwYWNpdHkgPSBnc3ViKCJmZWVsIHNpY2siLCAiZmVlbCBzaWNrIFxcW1xcLlxcLlxcLlxcXSIsIGNhcGFjaXR5KSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDJ9Cm1hZ2ljX3N1Yl9kYXRhX2NoX2FkdWx0cyAlPiUKICBsZWZ0X2pvaW4oZF9jaF9hZHVsdHMgJT4lIGRpc3RpbmN0KHN1YmpfaWQsIHRhcmdldCkpICU+JQogIGxlZnRfam9pbihsb2FkaW5nc19hZHVsdHMgJT4lIAogICAgICAgICAgICAgIGRpc3RpbmN0KGNhcGFjaXR5LCBjYXBhY2l0eV9vcmRfY2gpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBjYXBhY2l0eV9vcmRfY2gsIAogICAgICAgICAgICAgeSA9IHN1YmpfaWQsIAogICAgICAgICAgICAgZmlsbCA9IGRpZmYpKSArCiAgZmFjZXRfZ3JpZChyb3dzID0gdmFycyh0YXJnZXQpLCAKICAgICAgICAgICAgIHNwYWNlID0gImZyZWUiLCBzY2FsZXMgPSAiZnJlZSIpICsKICBnZW9tX3RpbGUoKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIodHlwZSA9ICJkaXYiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICJDaGluYSBhZHVsdHMiLAogICAgICAgeCA9ICJDYXBhY2l0eSIsIHkgPSAiUGFydGljaXBhbnQiLCBmaWxsID0gIlByZWRpY3RlZCAtIEFjdHVhbCIpCmBgYAoKYGBge3J9Cm1hZ2ljX3N1Yl9kYXRhX2NoX2FkdWx0cyAlPiUKICBncm91cF9ieShzdWJqX2lkKSAlPiUKICBzdW1tYXJpc2UobWVhbl9kaWZmID0gbWVhbihkaWZmLCBuYS5ybSA9IFQpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gbWVhbl9kaWZmKSkgKwogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDAsIGx0eSA9IDIsIGNvbG9yID0gImdyYXk1MCIpICsKICBnZW9tX2RlbnNpdHkoKSArCiAgbGFicyh0aXRsZSA9ICJDaGluYSBhZHVsdHMiLAogICAgICAgeCA9ICJNZWFuIFByZWRpY3RlZCAtIEFjdHVhbCIsIHkgPSAiRGVuc2l0eSIpCmBgYAoKCiMgVmFudWF0dSBhZHVsdHMKCjEuIFVzZSBwYXJ0aWNpcGFudHMnIHJlc3BvbnNlcyAocGFydGljaXBhbnQgbGV2ZWwpIHRvIGluZmVyIGZhY3RvciBzdHJ1Y3R1cmUgKGdyb3VwIGxldmVsKS4KCltzZWUgcHJpbWFyeSBhbmFseXNpc10KCmBgYHtyfQpsb2FkaW5nc192dF9hZHVsdHMgPC0gZWZhX3Z0X2FkdWx0cyRsb2FkaW5nc1tdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByZW5hbWVfYWxsKH4gZ3N1YigiXi4qXyIsICIiLCAuKSkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJjYXBhY2l0eSIpICU+JQogIG11dGF0ZShjYXBhY2l0eSA9IGdzdWIoIiBcXFtcXC5cXC5cXC5cXF0iLCAiIiwgY2FwYWNpdHkpLAogICAgICAgICBjYXBhY2l0eSA9IGdzdWIoIiAiLCAiXyIsIGNhcGFjaXR5KSkgJT4lCiAgY29sdW1uX3RvX3Jvd25hbWVzKCJjYXBhY2l0eSIpICU+JQogIGFzLm1hdHJpeCgpICU+JQogICMgcmVzY2FsZSB0byByYW5nZSBmcm9tIDAgdG8gMQogIHNjYWxlczo6cmVzY2FsZSh0byA9IGMoMCwgMSksIGZyb20gPSBjKC0xLCAxKSkKCmhlYWQobG9hZGluZ3NfdnRfYWR1bHRzKQpgYGAKCjIuIFVzZSBmYWN0b3Igc3RydWN0dXJlIChncm91cCBsZXZlbCkgaW4gY29tYmluYXRpb24gd2l0aCByZXNwb25zZXMgKHBhcnRpY2lwYW50IGxldmVsKSB0byBnZW5lcmF0ZSBmYWN0b3Igc2NvcmVzIChwYXJ0aWNpcGFudCBsZXZlbCkuCgpgYGB7cn0Kc2NvcmVzX3Z0X2FkdWx0cyA8LSBlZmFfdnRfYWR1bHRzJHNjb3Jlc1tdICU+JSAKICAjIHJlc2NhbGUgdG8gcmFuZ2UgZnJvbSAwIHRvIDEsIHVzaW5nIG9ic2VydmVkIHJhbmdlIG9mIGZhY3RvciBzY29yZXMKICBzY2FsZXM6OnJlc2NhbGUodG8gPSBjKDAsIDEpKQoKaGVhZChzY29yZXNfdnRfYWR1bHRzKQpgYGAKClguIFVzZSBmYWN0b3Igc2NvcmVzIChwYXJ0aWNpcGFudCBsZXZlbCkgdG8gbWFrZSBiaW5hcnkgZGVjaXNpb25zIGFib3V0IGF0dHJpYnV0aW9ucyBvZiBib2R5LCBoZWFydCwgYW5kIG1pbmQgKHBhcnRpY2lwYW50IGxldmVsIGxldmVsKS4gW05FRURFRD9dCgpbbm90IHlldCBkb25lXQoKMy4gVXNlIGZhY3RvciBzY29yZXMgW29yIFg/XSAocGFydGljaXBhbnQgbGV2ZWwpIGluIGNvbWJpbmF0aW9uIHdpdGggZmFjdG9yIGxvYWRpbmdzIChncm91cCBsZXZlbCkgdG8gdG8gZ2VuZXJhdGUgbGlrZWxpaG9vZCBvZiBlYWNoIGNhcGFjaXR5IChwYXJ0aWNpcGFudCBsZXZlbCkuCgpgYGB7cn0KbWFnaWNfdnRfYWR1bHRzIDwtIG1hZ2ljX2Z1bihsb2FkaW5nc192dF9hZHVsdHMsIHNjb3Jlc192dF9hZHVsdHMpICU+JQogIGRhdGEuZnJhbWUoKQpgYGAKCjQuIENvbXBhcmUgbGlrZWxpaG9vZCBvZiBlYWNoIGNhcGFjaXR5IChwYXJ0aWNpcGFudCBsZXZlbCkgd2l0aCBhY3R1YWwgcmVzcG9uc2VzIChwYXJ0aWNpcGFudCBsZXZlbCkgdG8gYXNzZXNzIGNvbnNpc3RlbmN5IG9yIHZpb2xhdGlvbnMgd2l0aCBncm91cC1sZXZlbCBmYWN0b3Igc3RydWN0dXJlLgoKYGBge3J9Cm1hZ2ljX3N1Yl9kYXRhX3Z0X2FkdWx0cyA8LSBtYWdpY192dF9hZHVsdHMgLSBkX3Z0X2FkdWx0c193CgptYWdpY19zdWJfZGF0YV92dF9hZHVsdHMgPC0gbWFnaWNfc3ViX2RhdGFfdnRfYWR1bHRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInN1YmpfaWQiKSAlPiUKICBnYXRoZXIoY2FwYWNpdHksIGRpZmYsIC1zdWJqX2lkKSAlPiUKICBtdXRhdGUoY2FwYWNpdHkgPSBnc3ViKCJfIiwgIiAiLCBjYXBhY2l0eSksCiAgICAgICAgIGNhcGFjaXR5ID0gZ3N1YigiZmVlbCBzaWNrIiwgImZlZWwgc2ljayBcXFtcXC5cXC5cXC5cXF0iLCBjYXBhY2l0eSkpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAyfQptYWdpY19zdWJfZGF0YV92dF9hZHVsdHMgJT4lCiAgbGVmdF9qb2luKGRfdnRfYWR1bHRzICU+JSBkaXN0aW5jdChzdWJqX2lkLCB0YXJnZXQpKSAlPiUKICBsZWZ0X2pvaW4obG9hZGluZ3NfYWR1bHRzICU+JSAKICAgICAgICAgICAgICBkaXN0aW5jdChjYXBhY2l0eSwgY2FwYWNpdHlfb3JkX3Z0KSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gY2FwYWNpdHlfb3JkX3Z0LCAKICAgICAgICAgICAgIHkgPSBzdWJqX2lkLCAKICAgICAgICAgICAgIGZpbGwgPSBkaWZmKSkgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnModGFyZ2V0KSwgCiAgICAgICAgICAgICBzcGFjZSA9ICJmcmVlIiwgc2NhbGVzID0gImZyZWUiKSArCiAgZ2VvbV90aWxlKCkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHR5cGUgPSAiZGl2IikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIGxhYnModGl0bGUgPSAiVmFudWF0dSBhZHVsdHMiLAogICAgICAgeCA9ICJDYXBhY2l0eSIsIHkgPSAiUGFydGljaXBhbnQiLCBmaWxsID0gIlByZWRpY3RlZCAtIEFjdHVhbCIpCmBgYAoKYGBge3J9Cm1hZ2ljX3N1Yl9kYXRhX3Z0X2FkdWx0cyAlPiUKICBncm91cF9ieShzdWJqX2lkKSAlPiUKICBzdW1tYXJpc2UobWVhbl9kaWZmID0gbWVhbihkaWZmLCBuYS5ybSA9IFQpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gbWVhbl9kaWZmKSkgKwogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDAsIGx0eSA9IDIsIGNvbG9yID0gImdyYXk1MCIpICsKICBnZW9tX2RlbnNpdHkoKSArCiAgbGFicyh0aXRsZSA9ICJWYW51YXR1IGFkdWx0cyIsCiAgICAgICB4ID0gIk1lYW4gUHJlZGljdGVkIC0gQWN0dWFsIiwgeSA9ICJEZW5zaXR5IikKYGBgCgojIENvbXBhcmlzb24KCmBgYHtyfQpiaW5kX3Jvd3MobWFnaWNfc3ViX2RhdGFfdXNfYWR1bHRzLAogICAgICAgICAgbWFnaWNfc3ViX2RhdGFfZ2hfYWR1bHRzLAogICAgICAgICAgbWFnaWNfc3ViX2RhdGFfdGhfYWR1bHRzLAogICAgICAgICAgbWFnaWNfc3ViX2RhdGFfY2hfYWR1bHRzLAogICAgICAgICAgbWFnaWNfc3ViX2RhdGFfdnRfYWR1bHRzKSAlPiUKICBncm91cF9ieShzdWJqX2lkKSAlPiUKICBzdW1tYXJpc2UobWVhbl9kaWZmID0gbWVhbihkaWZmLCBuYS5ybSA9IFQpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgbXV0YXRlKGNvdW50cnkgPSBnc3ViKCJfLiokIiwgIiIsIHN1YmpfaWQpLAogICAgICAgICBjb3VudHJ5ID0gZmFjdG9yKGNvdW50cnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygidXMiLCAiZ2giLCAidGgiLCAiY2giLCAidnQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBsZXZlbHNfY291bnRyeSksCiAgICAgICAgIHRhcmdldCA9IGdzdWIoIl4uKl8iLCAiIiwgc3Vial9pZCksCiAgICAgICAgIHRhcmdldCA9IGZhY3Rvcih0YXJnZXQsIGxldmVscyA9IGxldmVsc190YXJnZXRfdW5pdikpICU+JQogIGdncGxvdChhZXMoeCA9IGNvdW50cnksIHkgPSBtZWFuX2RpZmYpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgbHR5ID0gMiwgY29sb3IgPSAiZ3JheTUwIikgKwogIGdlb21faml0dGVyKGFlcyhjb2xvciA9IGNvdW50cnkpLCBoZWlnaHQgPSAwLCBhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSAuICU+JQogICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0KGNvdW50cnksIHN1YmpfaWQsIG1lYW5fZGlmZikgJT4lCiAgICAgICAgICAgICAgICAgICAgZ3JvdXBfYnkoY291bnRyeSkgJT4lCiAgICAgICAgICAgICAgICAgICAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAibWVhbl9kaWZmIiksCiAgICAgICAgICAgICAgICAgIGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkFsbCBhZHVsdHMiLAogICAgICAgeCA9ICJDb3VudHJ5IiwgeSA9ICJNZWFuIFByZWRpY3RlZCAtIEFjdHVhbCIpCmBgYApgYGB7cn0KYmluZF9yb3dzKG1hZ2ljX3N1Yl9kYXRhX3VzX2FkdWx0cywKICAgICAgICAgIG1hZ2ljX3N1Yl9kYXRhX2doX2FkdWx0cywKICAgICAgICAgIG1hZ2ljX3N1Yl9kYXRhX3RoX2FkdWx0cywKICAgICAgICAgIG1hZ2ljX3N1Yl9kYXRhX2NoX2FkdWx0cywKICAgICAgICAgIG1hZ2ljX3N1Yl9kYXRhX3Z0X2FkdWx0cykgJT4lCiAgZ3JvdXBfYnkoc3Vial9pZCkgJT4lCiAgc3VtbWFyaXNlKG1lYW5fZGlmZiA9IG1lYW4oZGlmZiwgbmEucm0gPSBUKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIG11dGF0ZShjb3VudHJ5ID0gZ3N1YigiXy4qJCIsICIiLCBzdWJqX2lkKSwKICAgICAgICAgY291bnRyeSA9IGZhY3Rvcihjb3VudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoInVzIiwgImdoIiwgInRoIiwgImNoIiwgInZ0IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gbGV2ZWxzX2NvdW50cnkpLAogICAgICAgICB0YXJnZXQgPSBnc3ViKCJeLipfIiwgIiIsIHN1YmpfaWQpLAogICAgICAgICB0YXJnZXQgPSBmYWN0b3IodGFyZ2V0LCBsZXZlbHMgPSBsZXZlbHNfdGFyZ2V0X3VuaXYpLAogICAgICAgICBhYnNfbWVhbl9kaWZmID0gYWJzKG1lYW5fZGlmZikpICU+JQogIGdncGxvdChhZXMoeCA9IGNvdW50cnksIHkgPSBhYnNfbWVhbl9kaWZmKSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGx0eSA9IDIsIGNvbG9yID0gImdyYXk1MCIpICsKICBnZW9tX2ppdHRlcihhZXMoY29sb3IgPSBjb3VudHJ5KSwgaGVpZ2h0ID0gMCwgYWxwaGEgPSAwLjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fcG9pbnRyYW5nZShkYXRhID0gLiAlPiUKICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdChjb3VudHJ5LCBzdWJqX2lkLCBhYnNfbWVhbl9kaWZmKSAlPiUKICAgICAgICAgICAgICAgICAgICBncm91cF9ieShjb3VudHJ5KSAlPiUKICAgICAgICAgICAgICAgICAgICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJhYnNfbWVhbl9kaWZmIiksCiAgICAgICAgICAgICAgICAgIGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkFsbCBhZHVsdHMiLAogICAgICAgeCA9ICJDb3VudHJ5IiwgeSA9ICJBQlNPTFVURSBNZWFuIFByZWRpY3RlZCAtIEFjdHVhbCIpCmBgYAo=